package com.atguigu.springmvc.demo01.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author yanglin
 * @create 2023-12-16 11:35 星期六
 * description:
 */
@Controller
public class ViewController {

    /**
     * 视图名称中没有任何前缀的时候创建的时ThymeleafView
     * @return
     */
    @RequestMapping("/testThymeleafView")
    public String testThymeleafView(){
        
        return "success";
    }

    /**
     * 试图名称以forward:开始，则创建InternalResourceView试图
     * @return
     */
    @RequestMapping("/testForward")
    public String testForward(){
        //转发到一个请求
        return "forward:/testThymeleafView";
    }


    /**
     * 试图名称以 redirect:  开始  则创建的是RedirectView
     * @return
     */
    @RequestMapping("/testRedirect")
    public String testRedirect(){
        //重定向一个请求
        return "redirect:/testThymeleafView";
    }

    /**
     * 转发和重定向的区别：
     *  1、位置
     *      转发：在服务器内部进行，请求在服务器内部直接传递给另一个资源；客户端浏览器只知道最初的请求，并不知中间的转发
     *      重定向：在客户端浏览器中进行。服务器返回一个特殊的响应，告诉浏览器去请求另一个URL
     *  2、流程：
     *      转发：客户端只发出一次请求，服务器在内部进行处理，并将请求转发到新的目标
     *      重定向：客户端浏览器收到响应后，会根据响应中的新URL发起新的请求
     * ３、可见性：
     *      转发：对客户端是透明的，客户无法察觉到内部转发
     *      重定向：客户端能够察觉到重定向，因为客户端会收到一个新的URL，然后发起请求
     *  4、HTTP状态码：
     *      转发：使用服务器内部状态码
     *      重定向：使用HTTP重定向状态码
     */

}
